import { UserConfigExport, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import { resolve } from "path";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
// https://vitejs.dev/config/
export default ({ mode }): UserConfigExport => {
    const env = loadEnv(mode, process.cwd());
    return {
        base: "./", // 开发或生产环境服务的公共基础路径
        plugins: [
            vue(),
            AutoImport({
                resolvers: [ElementPlusResolver()],
            }),
            Components({
                resolvers: [ElementPlusResolver()],
            }),
        ],
        resolve: {
            alias: {
                "@": pathResolve("./src"), // 相对路径别名配置，使用 @ 代替 src
            },
            // 可以省略的后缀
            extensions: [".js", ".ts", ".jsx", ".tsx", ".json"],
        },
        // 处理预构建
        optimizeDeps: {
            include: ["axios"],
        },
        // 打包配置
        build: {
            target: "modules",
            outDir: "dist", //指定输出路径
            assetsDir: "assets", // 指定生成静态资源的存放路径
            minify: "esbuild", // 混淆器，terser构建后文件体积更小,exbuild压缩速度更快，体积差距很小
        },
        // 配置css预处理
        css: {
            preprocessorOptions: {
                scss: {
                    javascriptEnabled: true,
                    // scss版本太高就无法使用@
                    additionalData: '@import "@/styles/variables.scss";', // eslint-disable-line
                },
            },
        },
        // 配置代理服务器
        server: {
            cors: true, // 默认true，指允许任何源
            open: true, // 在服务器启动时自动在浏览器中打开应用程序
            host: true, // 配置该选项，才能让非本机用户能访问到项目
            //反向代理配置，注意rewrite写法，开始没看文档在这里踩了坑
            proxy: {
                [env.VITE_APP_BASE_API]: {
                    target: env.VITE_SERVE, //代理接口
                    changeOrigin: true,
                    rewrite: (path) => path.replace(/^\/api/, ""),
                },
            },
        },
    };
};
// 封装方法用于新增别名
function pathResolve(dir) {
    return resolve(__dirname, dir);
}
